1、共享内存
	多个进程可以共享内核空间的一片内存区域，从而使用这片内存区域传递数据。
2、shmget
	创建或获取共享内存
	key: 用于区分不同消息队列的key值，为IPC_PRIVATE则始终创建新的消息队列
	size: 共享内存大小
	shmflg: 创建标志和属性
		IPC_CREAT 不存在则创建
		O_EXCL 与IPC_CREAT一起使用，存在则报错
	成功返回共享内存标识符，失败返回-1
	int shmget(key_t key, size_t size, int shmflg);
3、shmat
	将共享内存映射到用户空间
	shmid: 共享内存标识符
	shmaddr: 映射的地址，为NULL表示有系统自动分配
	shmflg: 共享内存权限，SHM_RDONLY 只读，默认可读写
	成功返回映射的地址，失败返回(void *) -1
	void *shmat(int shmid, const void *shmaddr, int shmflg);
4、shmdt
	取消shmat的映射
	shmaddr: 映射后的地址
	成功返回0，失败返回-1
	int shmdt(const void *shmaddr);
5、shmctl
	控制共享内存
	shmid: 共享内存标识符
	cmd: 控制命令
		IPC_STAT 拷贝内核中的共享内存数据结构
		IPC_SET 设置内核中的共享内存数据结构
		IPC_RMID 删除共享内存
	buf: 配合cmd使用
		struct shmid_ds {
			struct ipc_perm shm_perm;    /* Ownership and permissions */
			size_t          shm_segsz;   /* Size of segment (bytes) */
			time_t          shm_atime;   /* Last attach time */
			time_t          shm_dtime;   /* Last detach time */
			time_t          shm_ctime;   /* Last change time */
			pid_t           shm_cpid;    /* PID of creator */
			pid_t           shm_lpid;    /* PID of last shmat(2)/shmdt(2) */
			shmatt_t        shm_nattch;  /* No. of current attaches */
			...
		};
		struct ipc_perm {
			key_t          __key;    /* Key supplied to shmget(2) */
			uid_t          uid;      /* Effective UID of owner */
			gid_t          gid;      /* Effective GID of owner */
			uid_t          cuid;     /* Effective UID of creator */
			gid_t          cgid;     /* Effective GID of creator */
			unsigned short mode;     /* Permissions + SHM_DEST and
										SHM_LOCKED flags */
			unsigned short __seq;    /* Sequence number */
		};
	成功返回值由cmd决定，失败返回-1
	int shmctl(int shmid, int cmd, struct shmid_ds *buf);